package com.dormms.service.impl;

import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.dormms.bean.Dorm;
import com.dormms.bean.StuInfo;
import com.dormms.dao.DormDao;
import com.dormms.dao.GoodReapirDao;
import com.dormms.dao.StuInfoDao;
import com.dormms.dto.StuDorm;
import com.dormms.dto.StuDormInfo;
import com.dormms.service.DormService;
@Service
public class DormServiceImpl implements DormService {
	@Autowired
	private DormDao dormDao;
	@Autowired
	private StuInfoDao stuInfoDao;
	@Autowired
	private GoodReapirDao goodReapirDao;

	public Integer insertDorm(Dorm dorm) {
		// TODO Auto-generated method stub
		return dormDao.insertDormInfo(dorm);
	}

	public Integer insertStuDorm(StuDorm stuDorm) {
		// TODO Auto-generated method stub
		StuInfo stuInfo = stuInfoDao.queryStuInfoByStuId(stuDorm.getStuId());
		Integer isStuDormExist = dormDao.isStuDormExist(stuDorm.getStuId());
		int isDormNo = dormDao.queryDormByDormId(stuDorm.getDormId()).getDormStatus();
		if(isStuDormExist!=null || isDormNo ==3 || stuInfo == null) {
			return 0;
		}
		stuDorm.setStuDormStart(new Date());
		stuDorm.setStuDormStatus(1);
		dormDao.insertStuDorm(stuDorm);
		int dormNum = dormDao.queryDormByDormId(stuDorm.getDormId()).getDormNum();
		int stuDorms = dormDao.queryStuIdByDormId(stuDorm.getDormId()).size();
		Dorm dorm = new Dorm();
		dorm.setDormId(stuDorm.getDormId());
		if(dormNum == stuDorms) {
			dorm.setDormStatus(3);
		}else {
			dorm.setDormStatus(2);
		}
		dormDao.updateDormStatusByDormId(dorm);
		return stuDorm.getStuDormId();
	}

	public List<Dorm> queryDormList(Dorm dorm) {
		// TODO Auto-generated method stub
		return dormDao.queryDormInfo(dorm);
	}

	public List<Dorm> queryAllDormNo(Integer dormLocationId) {
		// TODO Auto-generated method stub
		return dormDao.queryAllDormNoByDormLocationId(dormLocationId);
	}

	public Integer updateDorm(Dorm dorm) {
		// TODO Auto-generated method stub
		int stuDorms = dormDao.queryStuIdByDormId(dorm.getDormId()).size();
		if(dorm.getDormNum() <= stuDorms) {
			dorm.setDormNum(stuDorms);
			dorm.setDormStatus(3);
		}else {
			if(stuDorms > 0) {
				dorm.setDormStatus(2);
			}else {
				dorm.setDormStatus(1);
			}
			
		}
		return dormDao.updateDormInfo(dorm);
	}

	public Integer queryDormLocationIdByDormAdminId(String dormAdminId) {
		// TODO Auto-generated method stub
		return dormDao.queryDormLocationIdByDormAdminId(dormAdminId);
	}

	public StuDormInfo queryStuDormInfoByDormId(Integer dormId) {
		// TODO Auto-generated method stub
		StuDormInfo stuDormInfo = new StuDormInfo();
		stuDormInfo.setDorm(dormDao.queryDormByDormId(dormId));
		List<String> stuIds = dormDao.queryStuIdByDormId(dormId);
		List<StuInfo> stuInfos = new ArrayList<StuInfo>();
		for (Iterator<String> stuId = stuIds.iterator(); stuId.hasNext();) {
			String temp = (String) stuId.next();
			stuInfos.add(stuInfoDao.queryStuInfoByStuId(temp));
		}
		stuDormInfo.setStuInfos(stuInfos);
		return stuDormInfo;
	}

	public Integer deleteStuDormInfo(String stuId, Integer dormId) {
		// TODO Auto-generated method stub
		//删除学生入住信息
		Integer num = dormDao.deleteStuDormInfo(stuId, dormId);
		//更新宿舍状态
		Dorm dorm = dormDao.queryDormByDormId(dormId);
		int stuDorms = dormDao.queryStuIdByDormId(dormId).size();
		if(stuDorms == 0) {
			dorm.setDormStatus(1);
		}else{
			dorm.setDormStatus(2);
		}
		dormDao.updateDormInfo(dorm);
		return num;
	}

	public Integer deleteDormInfo(Integer dormId) {
		// TODO Auto-generated method stub
		//删除学生入住信息
		List<String> stuIds = dormDao.queryStuIdByDormId(dormId);
		for (String stuId : stuIds) {
			dormDao.deleteStuDormInfo(stuId, dormId);
		}
		//删除宿舍报修记录
		goodReapirDao.deleteGoodRepairByDormId(dormId);
		//删除宿舍
		return dormDao.deleteDormInfo(dormId);
	}

}
